// ++++++++++++++++++++++++++++++++++++++++
// 《Go 语言+Vue.js 实战派——基于 Gin 框架》源码
// ++++++++++++++++++++++++++++++++++++++++
// 作者公众号：源码大数据
// 自媒体账号（抖音、视频号、快手、B站、知乎）：廖显东-ShirDon
// 仓库地址：https://gitee.com/shirdonl/goGinVue.git
// 仓库地址：https://github.com/shirdonl/goGinVue.git
// 博客：https://www.shirdon.com
// 购买图书：https: //item.jd.com/14958064.html
// ++++++++++++++++++++++++++++++++++++++++

package main

import "fmt"

func main() {
	// 没有传递类型
	fmt.Println(GenericsFunc([]int{99, 98, 97, 96, 95}))

	// 传球型
	fmt.Println(GenericsFunc[int]([]int{99, 98, 97, 96, 95}))
}

// T 是一个类型参数，在函数内部像普通类型一样使用
// any 是对类型的约束，即 T 必须实现“any”接口
func GenericsFunc[T any](s []T) []T {
	l := len(s)
	r := make([]T, l)

	for i, ele := range s {
		r[l-i-1] = ele
	}
	return r
}

//$ go run generics1.go
//[95 96 97 98 99]
